package com.example.driving.ui.adapter;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;


import com.example.driving.R;
import com.example.driving.model.Chat;

import java.util.ArrayList;

/**
 * 通过使用该适配器，可以将聊天消息列表的数据源与 RecyclerView 进行绑定，实现聊天消息的展示和滚动效果。
 */
public class ChatAdapter extends RecyclerView.Adapter<ChatAdapter.ChatViewHolder> {
    private final ArrayList<Chat> data;

    /**
     * 接收一个聊天消息列表作为数据源。
     * @param data
     */
    public ChatAdapter(ArrayList<Chat> data) {
        this.data=data;
    }

    /**
     * 创建聊天消息视图的 ViewHolder。根据消息的类型选择不同的布局文件进行填充，并将填充后的视图封装在一个自定义的 ChatViewHolder 中返回。
     * @param parent   The ViewGroup into which the new View will be added after it is bound to
     *                 an adapter position.
     * @param viewType The view type of the new View.
     * @return
     */
    @NonNull
    @Override
    public ChatViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
        View view;
        if(viewType==Chat.TYPE_RECEIVE){
            view=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_recrive,parent,false);
        }else {
            view=LayoutInflater.from(parent.getContext()).inflate(R.layout.item_send,parent,false);
        }
        return new ChatViewHolder(view);
    }

    /**
     * 绑定数据到聊天消息视图的 ViewHolder。根据当前位置获取对应的聊天消息对象，并将消息的图片和文本内容设置到对应的视图控件中。
     * @param holder   The ViewHolder which should be updated to represent the contents of the
     *                 item at the given position in the data set.
     * @param position The position of the item within the adapter's data set.
     */
    @Override
    public void onBindViewHolder(@NonNull ChatViewHolder holder, int position) {
        Chat chat=data.get(position);
        holder.imageView.setImageResource(chat.getImageId());
        holder.textView.setText(chat.getMessage());
    }

    @Override
    public int getItemViewType(int position){
        return data.get(position).getType();
    }


    @Override
    public int getItemCount() {
        return data.size();
    }

    /**
     * 自定义的 ViewHolder，包含接收消息和发送消息的视图控件。
     */
    public static class ChatViewHolder extends RecyclerView.ViewHolder {
        ImageView imageView;
        TextView textView;
        public ChatViewHolder(@NonNull View itemView) {
            super(itemView);
            imageView=itemView.findViewById(R.id.imageView);
            textView=itemView.findViewById(R.id.textView);
        }
    }


}
